package com.cc.flink.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 异常处理工具类
 * 提供统一的异常处理机制和策略
 */
public class JobExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(JobExceptionHandler.class);

    /**
     * 处理数据库写入异常的通用方法
     *
     * @param e    异常对象
     * @param data 导致异常的数据
     * @return 是否应该重试
     */
    public static boolean handleDatabaseException(Exception e, Object data) {
        logger.error("Database operation failed: {}. Data causing error: {}", e.getMessage(), data, e);

        // 判断是否是可重试的异常类型
        // 例如网络临时故障、连接超时等可以重试
        // 主键冲突、数据格式错误等通常不应该重试
        String errorMessage = e.getMessage() != null ? e.getMessage().toLowerCase() : "";
        if (errorMessage.contains("connection refused") ||
                errorMessage.contains("timeout") ||
                errorMessage.contains("network error")) {
            logger.warn("Retriable database error detected, will retry");
            return true;
        }

        logger.warn("Non-retriable database error detected, will not retry");
        return false;
    }
}